package ar.republicagroup.gestion.dao.jpa;

import ar.republicagroup.gestion.dao.ChequeEstadoDAO;
import ar.republicagroup.gestion.entities.ChequeEstado;
import ar.republicagroup.gestion.util.JComboBoxModel;
import ar.republicagroup.gestion.util.JPAUtil;
import ar.republicagroup.gestion.util.UserSession;
import ar.republicagroup.gestion.util.messages.UIMessages;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import javax.swing.DefaultComboBoxModel;
import org.apache.log4j.Logger;

public class ChequeEstadoDAOImplJpa implements ChequeEstadoDAO {
    
    private EntityManager		 em;
    
    /* Combos */
    public static final int ESTADOS_DE_BUSQUEDA_CHEQUE = 1;
    public static final int REPORTE_LIQUIDACION = 2;
    public static final int ESTADOS_CUSTOMIZABLES = 3;
    public static final int ESTADOS_PARA_EDITAR_LIQUID = 4;
    
    /*Logging*/
    
    private static Logger log = Logger.getLogger(ChequeEstadoDAOImplJpa.class);
    
    
    
    public void ChequeEstadoDAOImplJPa(){
        em = JPAUtil.getEntityManager();
    }
    

    @Override
    public List<ChequeEstado> findEntities() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<ChequeEstado> getChequesByFilters(String filter1) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String insert(ChequeEstado beanChequeEstado) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String update(ChequeEstado beanCheque) {
        String resultado = null;
        try     {
		em.getTransaction().begin();
		em.merge(beanCheque);	
		em.getTransaction().commit();
		resultado = UIMessages.getInfoMessage("onCompleteUpdate");
                log.info(UserSession.getInstance().getUser_name()+" ---> "+"Actualizando datos de cheque... :"+beanCheque.getId());
                
                }catch(Exception ex){
                    em.getTransaction().rollback();
                    log.error("Error actualizando datos de cheque", ex);
		}
	
		return resultado;
      //        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public ChequeEstado get(Integer id_cheque_estado) {
        if(!em.isOpen()){ em = JPAUtil.getEntityManager(); } 
        return em.find(ChequeEstado.class, id_cheque_estado);
    }

    @Override
    public String delete(Integer id_cheque_estado) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public DefaultComboBoxModel combo(int tipoDeEstados) {
        em = Persistence.createEntityManagerFactory("RepublicaGroupAppPU").createEntityManager();
        TypedQuery query;
        
        switch(tipoDeEstados){
                case ESTADOS_DE_BUSQUEDA_CHEQUE        :  query = em.createQuery("SELECT c FROM ChequeEstado c WHERE c.nombre NOT LIKE 'Aprobado'", ChequeEstado.class);break;
                case REPORTE_LIQUIDACION               :  
                case ESTADOS_PARA_EDITAR_LIQUID        :  query = em.createQuery("SELECT c FROM ChequeEstado c WHERE c.nombre NOT LIKE 'Ingresado' AND c.nombre NOT LIKE 'Liquidado' AND c.nombre NOT LIKE 'Redepositado'", ChequeEstado.class); break;
                case ESTADOS_CUSTOMIZABLES             :  query = em.createQuery("SELECT c FROM ChequeEstado c WHERE c.nombre NOT LIKE 'Liquidado' AND c.nombre NOT LIKE 'Aprobado'  AND c.nombre NOT LIKE 'Redepositado'", ChequeEstado.class); break;   
                    
                default: query = em.createQuery("SELECT c FROM ChequeEstado c WHERE c.estado = 1",ChequeEstado.class);
            }
        
        List<ChequeEstado> chequeEstadoList   = query.getResultList();
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        
        if(ESTADOS_DE_BUSQUEDA_CHEQUE == tipoDeEstados){
            model.addElement(new JComboBoxModel("0", "Todos"));
        }
        
        if(ESTADOS_PARA_EDITAR_LIQUID == tipoDeEstados){
            model.addElement(new JComboBoxModel("0", "Seleccione"));
        }
        
        for(ChequeEstado cheque_estado : chequeEstadoList){
                JComboBoxModel   combo = new JComboBoxModel(cheque_estado.getId().toString(), cheque_estado.getNombre());
                model.addElement(combo);
        }
         return model;
    }
    
    
    
    
    
}
